# config=utf-8
from flask import Blueprint, render_template, g, redirect, url_for
from flask_login import current_user, login_required

from book.model.user import User

# 这里的 templates 的路径是该配置所在目录下的 templates 目录。
userRoute = Blueprint('user', __name__, url_prefix='/user',
                      template_folder='templates')


@userRoute.route('/')
@userRoute.route('/<user_id>/')
def index(user_id=None):
    """
    搜索并显示指定编号的用户的信息
    查询出用户编号是 id 的用户的信息集合，并从中取出第一条数据。
    Args:
        user_id:用户编号
    """

    if user_id is None:
        if g.user.is_authenticated:
            # 判断用户是否已登录，如果已登录，则使用登录信息。
            user = current_user
        else:
            # 没有输入参数且未登录时，跳转回首页，此处表示：URL 跳转至控制器 home.py 中的 index 函数。
            return redirect(url_for('home.index'))
    else:
        if not user_id.isdigit() or int(user_id) <= 0:
            # 当传入的 user_id 不是一个正常的数据 Id 时，返回首页。
            # 条件1：判断传入的 user_id 是否是一个数值类型。
            # 条件2：将 user_id 转换成 int 型，并判断该值是否小于 0。
            return redirect(url_for('home.index'))

        # 搜索用户信息。
        user = User.query.filter_by(id=user_id).first()

        if user is None:
            # 搜索不到用户信息时，返回首页，此处输入的是一个 URL 地址。
            return redirect('/')

    return render_template('user/index.html', user=user)


@userRoute.route('/test/')
@login_required
def test():
    """
    login_required 表示已登录了才能访问，必须放在 route 的下面才有效。
    """
    return "123456"
